
object ScalaVarDemo02 {
  def main(args: Array[String]): Unit = {
    // 类型推导，这个时候age是Int类型
    var age = 18
    /**
     * 有两种方式我们可以age是Int类型的：
     *  1. idea提示
     *  2. println(age.isInstanceOf[Int]) 结果为true
     */
    // 类型确定后，就不能修改，说明Scala是强数据类型语言
    // age = 2.1 编译器报错
    // age可以修改，因为age是var声明的
    age = 19
    val sal = 200
    // sal是val声明的，所以不可变
    // sal = 10000 编译器报错
    /**
     * Scala设计者为什么设计 var 和 val 呢？
     * 1、在实际编程，我们更多的需求是获取/创建一个对象后，读取该对象的属性，或者是修改对象的属性值，但是我们很少去改变这个对象本身。
     *   var dog = new Dog()
     *   dog.age = 99
     *   dog = new Dog()
     *  这时我们就可以使用val定义dog
     *   val dog = new Dog()
     *   dog.age = 99
     * 2、因为val 没有线程安全问题，因此效率高，scala的设计者推荐我们val
     * 3、如果对象需要改变，则使用var
     */
    val dog = new Dog()
    // 0
    println(dog.age)
    println(dog.name)
    // 这里我们就不能有下面的操作了
    // dog = new Dog()
  }

}
/**
 * 声明一个Dog类
 */
class Dog {
  // 声明一个age属性,给了一个默认值 _
  var age: Int = _
  var name: String = "小花"
}